package processes

import(
	"fmt"
	"net"
	"ChatRoom/common/message"
	"ChatRoom/server/utils"
	"ChatRoom/server/model"
	"encoding/json"
)

type UserProcess struct{
	Conn net.Conn	//一个连接
}

//编写一个函数serverProcessLogin函数，专门处理登陆请求
func (this *UserProcess)ServerProcessLogin(msg *message.Message)(err error){
	//先从msg中取出msg.data,并限制级反序列化成LoginMsg
	var loginMsg message.LoginMsg
	fmt.Println(msg.Data)
	err = json.Unmarshal([]byte(msg.Data),&loginMsg)
	if err != nil{
		fmt.Println("反序列化失败",err)
		return
	}

	//1.先声明一个resmsg
	var resMsg message.Message
	resMsg.Type = message.LoginResMsgType

	//2.再声明一个loginResMsg,并完成赋值
	var loginResMsg message.LoginResMsg
	// //如果用户id=100 密码=123456，认为合法，否则不合法
	// if loginMsg.UserId==100 && loginMsg.UserPwd=="123456"{
	// 	//合法
	// 	loginResMsg.Code=200
		
	// }else{
	// 	//不合法
	// 	loginResMsg.Code=500
	// 	loginResMsg.Error = "该用户不合法"
	// }
	user,err := model.MyUserDao.Login(loginMsg.UserId,loginMsg.UserPwd)
	if err!=nil{
		if err == model.MyError.ERROR_USER_NOTEXISTS{
			loginResMsg.Code=500
	 		loginResMsg.Error = err.Error()
		}else if err == model.MyError.ERROR_USER_PWD{
			loginResMsg.Code=403
	 		loginResMsg.Error = err.Error()
		}else{
			loginResMsg.Code=505
	 		loginResMsg.Error = "服务器内部错误"
		}

	}else{
		loginResMsg.Code=200
		fmt.Println(user,"登陆成功")
	}
	//3.将loginResMsg序列化,序列化后得到的是切片
	data,err := json.Marshal(loginResMsg)
	if err!=nil{
		fmt.Println("json.Marshal err=",err)
		return
	}
	//4.将切片data强转为string类型并赋值给resMsg.Data
	resMsg.Data = string(data)
	//5.对resMsg序列化准备发送
	data,err = json.Marshal(resMsg)
	if err!=nil{
		fmt.Println("json.Marshal err=",err)
		return
	}
	//6.发送，将其封装到writePkg函数中
	//因为使用分层模式mvc,我们先创建一个Transfer实例
	tf := &utils.Transfer{
		Conn : this.Conn,
	}
	err = tf.WritePkg(data)
	return
}